/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vue;

import controlleur.ControleurDeJeu;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JPanel;
import model.IA;
import model.PartieCarteObservateur;

/**
 *
 * Personalisation de la main du joueur

 *
 * Vue de la main du joueur. Les cartes présentes dans sa main y seront
 * affichés, avec la possibilitée d'afficher leur descriptif dans la selection
 * en cliquant dessus. Les boutons d'actions Passer, Poser et Attaquer seront
 * également présent dans cette classe.
 *
 */

public class Main_vue extends JPanel implements PartieCarteObservateur {
// * Attributs : elle prend un ControleurDeJeu en paramètre, et elle a un tableau
// de point(Coordonées) ainsi qu'une hashmap de <carte_vue, point> elle associe
// donc une position à une carte, les points sont les x,y de chaque carte elle
// se situe au point(0,0) de la carte en haut à gauche donc

  private ControleurDeJeu cjeu;
  private HashMap<Carte_vue, Point> listeCarte;
  private JPanel jBout;
  private JPanel main;
  private GridLayout mainLayout;


    /**
     * Constructeur de la vue qui permet de créer et placer tout les élements
     * necessaires à l'affichage.
     *
     * @param cjeu
     * @throws IOException
     */
    public Main_vue(ControleurDeJeu cjeu) throws IOException {
    this.cjeu = cjeu;
    this.setFocusable(true);
    this.actualiser();

    this.addMouseListener(new MouseAdapter() {

      @Override
      public void mouseClicked(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON1) {// Méthode qui va séléctionner une carte
          for (Carte_vue c : Main_vue.this.listeCarte.keySet()) {
            if (Main_vue.this.main.getComponentAt(e.getPoint()) == c) { //Si la carte cliquée correspond à la carte itérée
              Main_vue.this.cjeu.selection(c.getCarte());
              Main_vue.this.cjeu.addMessage("Carte Séléctionné de la main : " + c.getCarte().getNom()); //à supprimer au final
            }
          }

        } else if (e.getButton() == MouseEvent.BUTTON3) {// Méthode qui va supprimer une carte de la main
          for (Carte_vue c : Main_vue.this.listeCarte.keySet()) {
            if (Main_vue.this.main.getComponentAt(e.getPoint()) == c) { //Si la carte cliquée correspond à la carte itérée
              Main_vue.this.cjeu.getJoueur().defausser(c.getCarte());
            }
          }
        }
        Main_vue.this.cjeu.notifierObs();
      }
    });

  }

    //Méthode qui permet de créer la vue, directement appelée dans le constructeur
  /**
   *
   */
  @Override
  public void actualiser() {
    this.removeAll();
    this.setVisible(false);
    this.setVisible(true);
    this.listeCarte = new HashMap<>();
    this.setLayout(new BorderLayout());
    this.main = new JPanel();
    this.mainLayout = new GridLayout(3, 3);
    this.main.setLayout(this.mainLayout);
    this.jBout = new JPanel();

    for (int i = 0; i < this.cjeu.nombreCarte() && i <= 8; i++) {
      if (i == 8) {
        this.cjeu.addMessage("Votre main est pleine");
        this.cjeu.addMessage("Faites un click droit sur une carte pour la supprimer de votre main");
      } else {
        Carte_vue c = new Carte_vue(0, 0, this.cjeu.getMain().get(i));
        this.mainLayout.addLayoutComponent("carte" + i, c);
        Point p = new Point(c.getX(), c.getY());
        this.listeCarte.put(c, p);
        this.main.add(c);
      }

    }

        //Remplissage du panel des boutons
    //Création et ajout des boutons et leur actions
    JButton pass = new JButton("Passer");
    JButton att = new JButton("Attaquer");
    JButton pos = new JButton("Poser");
    this.jBout.setLayout(new FlowLayout());
    this.jBout.add(pass, FlowLayout.LEFT);
    this.jBout.add(att, FlowLayout.CENTER);
    this.jBout.add(pos, FlowLayout.RIGHT);

    //Action du bouton Passer
    pass.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent ae) {
        cjeu.tourSuivant();
//        cjeu.notifierObs();
      }
    });
    // Action du bouton Attaquer
    att.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent ae) {
        cjeu.attaquerPhase1();
        cjeu.notifierObs();
      }
    });
    //Action du bouton Poser
    pos.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        cjeu.poserCarte();
      }
    });

    //Ajout des deux panels au panel principal
    this.main.setLayout(this.mainLayout);
    this.add("Center", this.main);
    this.add("South", this.jBout);
    this.main.setBackground(new Color(218, 218, 218));
    this.jBout.setBackground(new Color(218, 218, 218));
  }

}
